package pl.wroc.pwr.psi.service;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pl.wroc.pwr.psi.entity.PytanieOtwarte;
import pl.wroc.pwr.psi.entity.SlowoKluczowe;
import pl.wroc.pwr.psi.entity.SlowoKluczoweToPytanieOtwarte;
import pl.wroc.pwr.psi.entity.Szablon;
import pl.wroc.pwr.psi.repository.SlowoKluczoweToPytanieOtwarteRepository;
import pl.wroc.pwr.psi.repository.SzablonRepository;

@Service
public class SzablonService {
	
	@Autowired
	private SzablonRepository szablonRepository;
	
	@Autowired
	private SlowoKluczoweToPytanieOtwarteRepository slowoKluczoweToPytanieOtwarteRepository;
	
	@Autowired
	private DefinicjaSynonimowService definicjaSynonimowService;
	
	@Autowired
	private PytanieOtwarteService pytanieOtwarteService;
	
	
	public List<Szablon> findAllSzablon() {
		return szablonRepository.findAll();
	}
	
	public Szablon findSzablonById(Integer id)
	{
		return  szablonRepository.findOne(id);		
	}
	
	public Set<SlowoKluczowe> findSlowoKluczoweByPytanie(Integer idPytania) {
		PytanieOtwarte pytanieOtwarte = pytanieOtwarteService.findPytanieOtwarteById(idPytania);
		Set<SlowoKluczoweToPytanieOtwarte> slowoKluczowePytanie = pytanieOtwarte.getSlowoKluczowes();
		
		Set<SlowoKluczowe> solwaKluczowe = new HashSet<SlowoKluczowe>();
		
		for (SlowoKluczoweToPytanieOtwarte skp : slowoKluczowePytanie) {
			solwaKluczowe.add(skp.getSlowoKluczowe());
		}
		return solwaKluczowe;
	}
	
	public SlowoKluczowe dodajSlowoKluczoweToPytanie(Integer pytanieId, Integer skId) {
		SlowoKluczowe sk = definicjaSynonimowService.findSlowoKluczoweById(skId);
		PytanieOtwarte po = pytanieOtwarteService.findPytanieOtwarteById(pytanieId);
		SlowoKluczoweToPytanieOtwarte skp = new SlowoKluczoweToPytanieOtwarte();
		skp.setSlowoKluczowe(sk);
		skp.setPytanieOtwarte(po);
		
		slowoKluczoweToPytanieOtwarteRepository.save(skp);
		
		return skp.getSlowoKluczowe();
	}
	
	public void usunSlowoKluczoweToPytanie(Integer pytanieId, Integer skId) {
		PytanieOtwarte pytanieOtwarte = pytanieOtwarteService.findPytanieOtwarteById(pytanieId);
		Set<SlowoKluczoweToPytanieOtwarte> slowoKluszowePytanie = pytanieOtwarte.getSlowoKluczowes();
		SlowoKluczoweToPytanieOtwarte skpToRemove = getSlowoKluczoweToPytanieOtwarteBySlowoKluczowe(slowoKluszowePytanie, skId);
		skpToRemove.setPytanieOtwarte(null);
		skpToRemove.setSlowoKluczowe(null);
		
		slowoKluczoweToPytanieOtwarteRepository.save(skpToRemove);
		slowoKluczoweToPytanieOtwarteRepository.delete(skpToRemove);
		
	}
	
	private SlowoKluczoweToPytanieOtwarte getSlowoKluczoweToPytanieOtwarteBySlowoKluczowe(Set<SlowoKluczoweToPytanieOtwarte> slowoKluszowePytanie, Integer skId) {
		for (SlowoKluczoweToPytanieOtwarte skp : slowoKluszowePytanie) {
			if(skp.getSlowoKluczowe().getId().equals(skId)) {
				return skp;
			}
		}
		return null;
	}

}
